// 1.导入axios模块
 import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
// 导入token.js
import { getToken,saveToken } from './token.js'
// 导入toast
import {Toast} from 'vant'
// 导入路由
import router from '@/router/index.js'
Vue.use(VueAxios,axios)

// 2.创建axios自定义实例
const instance = axios.create({
    baseURL:'http://toutiao.itheima.net',
    timeout:10000
})

// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // 默认给每一个接口添加token
    if( getToken() ){
      config.headers.Authorization= `Bearer ${getToken().token}`
}
    return config;
  }, 
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });


// 添加响应拦截器
instance.interceptors.response.use(
   function (response) {
    // 对响应数据做点什么
    return response;
  },
  async function (error) {
   console.dir(error);
// 1.判断状态码是不是401
if(error.response.status == 401){
    // 2.判断用户有没有token
    if( getToken() ){
        // 2.1有token,说明token过期,刷新token
        // 刷新token接口不能使用instance发送, 原因:刷新token接口不是传token,而是传refresh_token, 解决方案:用axios,只是axios发请求基地址需要自己补上
       try {
        //    3.1可以正常刷新token
        let res = await axios({
            url:'http://toutiao.itheima.net/v1_0/authorizations',
            method:'put',
            headers: {
                // 调用方法 获取返回的对象 然后 点出 token
                Authorization: `Bearer ${getToken().refresh_token}`
            }
        })
        console.log(res);
        // (1)更新token
        // 先取出旧token
        let obj = getToken()
        // 更新token
        obj.token = res.data.data.token
        // 存入更新后的token
        saveToken(obj)
        // (2)继续发送之前的请求
        return instance(error.config)
       } catch (error) {
        //    3.2refresh_token也过期,需要重新登陆
        Toast.fail('请先登录')
        router.push({path:'/login'})
       }

    }else{
        // 2.2没有token,说明没登陆,直接跳转登录页
        Toast.fail('请先登录')
        router.push({path:'/login'})
    }
}else{
    // 如果不是401,不做任何处理
}
    return Promise.reject(error);
  });
// 导出instance
export default instance
